package it.unicam.ids.pvm.data;

import it.unicam.ids.pvm.distributore.Casella;

/**
 * La classe rappresenta un'interfaccia per la gestione di ogni casella
 * dell'espositore, nella sorgente dati. Uso del design pattern DAO.
 * 
 * @author Luca Iachini, Valerio Iachini, Alessandro Cardenà
 * 
 */

public interface CasellaDAO {

	/**
	 * Il metodo consente di inserire una nuova casella nella sorgente dati
	 * 
	 * @param casella
	 *            nuova casella da inserire.
	 * @throws DAOException
	 *             messaggio d'errore relativo all'inserimento della casella.
	 */

	public void insert(Casella casella) throws DAOException;

	/**
	 * il metodo consente di aggiornare una casella esistente, nella sorgente
	 * dati.
	 * 
	 * @param casella
	 *            casella coi parametri aggiornati.
	 * @param oldEtichetta
	 *            etichetta della casella da aggiornare.
	 * @throws DAOException
	 *             messaggio d'errore relativo alla modifica di una casella.
	 */

	public void update(Casella casella, String oldEtichetta)
			throws DAOException;

	/**
	 * Il metodo consente di eliminare una casella presente nella sorgente dati
	 * 
	 * @param casella
	 *            casella da eliminare.
	 * @throws DAOException
	 *             messaggio d'errore relativo all'eliminazione della casella.
	 */

	public void delete(Casella casella) throws DAOException;

	/**
	 * Il metodo consente di recuperare tutte le caselle presenti nella
	 * sorgente dati.
	 * 
	 * @return caselle array di caselle.
	 * @throws DAOException
	 *             messaggio d'errore relativo al recupero delle caselle.
	 */

	public Casella[] findAllCaselle() throws DAOException;

	/**
	 * Il metodo consente di recuperare una specifica casella, contenuta nella
	 * sorgente dati.
	 * 
	 * @param etichetta
	 *            codice specifico per ogni casella.
	 * @return casella casella cercata.
	 * @throws DAOException
	 *             messaggio d'errore relativo al recupero della casella.
	 */

	public Casella findByEtichetta(String etichetta) throws DAOException;

}
